/*
	Copyright (c) 2010 <copyright holders>
	This source code is licensed under The MIT License,
	see the file LICENSE for details.
	*/

#ifndef PRESENTATION_HPP
#define PRESENTATION_HPP

#include <OGRE/OgreVector2.h>
#include <OIS/OISKeyboard.h>
#include <OIS/OISMouse.h>

#include "ForwardDecls.hpp"
#include "HelpDefs.hpp"

namespace spelprog2 {
namespace presentation {

class Presentation {
    HIDE_EVIL_CONSTRUCTORS(Presentation);

    Game & game_;
public:
    Presentation(Game & game) : game_(game) { }
    virtual ~Presentation() { }

    Game & getGame() { return game_; }

    virtual void initScene() = 0;
    virtual void initCameraManager() = 0;
    virtual void initGUI() = 0; //because we can't finish it due to weird init order of Ogre
    virtual Ogre::SceneManager & getSceneManager() = 0;
    virtual CameraMan & getCameraManager() = 0;
    virtual void registerNetListeners() = 0;
    virtual void unregisterNetListeners() = 0;

    virtual void update(float deltaTime) = 0;

    virtual void keyPressed(const OIS::KeyEvent & ev) = 0;
	virtual void keyReleased(const OIS::KeyEvent & ev) = 0;

    virtual void mouseMoved(const Ogre::Vector2 & point, const Ogre::Vector2 & normalizedPoint,
        const OIS::MouseEvent & ev) = 0;
    virtual void mousePressed(const Ogre::Vector2 & point, const Ogre::Vector2 & normalizedPoint,
        const OIS::MouseEvent & ev, OIS::MouseButtonID id) = 0;
    virtual void mouseReleased(const Ogre::Vector2 & point, const Ogre::Vector2 & normalizedPoint,
        const OIS::MouseEvent & ev, OIS::MouseButtonID id) = 0;
};

}; //presentation
}; //spelprog2

#endif //PRESENTATION_HPP
